package comunicaciones

import java.util.Date
import cliente.empresa.Cliente

class LlamadaLargaDistancia(num : Int, localidadOrg : String,var localidadDes :String, duracion :Int) extends Comunicacion{      
			val tabla = new TablaConLocalidades()
			val tipo = "Larga distancia"
			var numDest = num
			
//----------------------------------Metodos----------------------------------------------------------
			  
	   //*************************
	   // Calcula el precio a una llamada de larga distancia sin planes
	   //*************************			  
		def precioParaSinPlan(): Double ={
			  val precioDeLocalidades = this.tabla.tablaConPrecios.get(this.localidadOrg+" "+this.localidadDes)
			  var total = 0.0
			  if(this.duracion > 60){
			    total += precioDeLocalidades.get
			    total += calcularPrecioEnSegs(precioDeLocalidades.get, this.duracion - 60)
			    total
			  }
			  else{
			    precioDeLocalidades.get
			  }  
		}
		
		// Auxiliar de  precioParaSinPlan(): Double
		def calcularPrecioEnSegs(precio : Double, duracion : Int): Double ={
		  if(duracion < 10){
		    0.0
		  }
		  else{
		    precio + this.calcularPrecioEnSegs(precio, duracion - 10)
		  }
		}
		
		 //*************************
	     // Calcula el precio a una llamada de larga distancia con plan numeros amigos
	     //*************************	
		def precioParaConPlanAmigos(numeros :List[Int]): Double ={
				if(numeros.contains(this.numDest)){
					0.0
				}else{
					this.precioParaSinPlan()
				}
		}
		
		 //*************************
	     // Calcula el precio a una llamada con plan ciudades amigas
	     //*************************	
		def precioParaConPlanCiudades(ciudad :String): Double={
			if(this.localidadDes == ciudad){
			  0.0
			}
			else{
			  this.precioParaSinPlan()
			}
		}
		
	 //*************************
	 // Calcula el precio a una llamada con plan hablate todo
	 //*************************	
		
	def precioParaHablateTodo():Double ={
	   
	    if(this.esDeFinDeSemana()){
	      if(this.duracion <= 300){
	        this.precioParaSinPlan()
	      }else{
	        (new LlamadaLargaDistancia(0, this.localidadOrg, this.localidadDes,300)).precioParaSinPlan()
	      }
	    }else{
	      this.precioParaSinPlan()
	    }
	}	
		
		
		def duracion() = this.duracion
		
		def esLarga() = this.duracion > 300
		
		override def getLocalidadDestino() : String = this.localidadDes
		
//----------------------------------MetodosEj3----------------------------------------------------------
	   //*************************
	   // Calcula el precio a una llamada larga distancia de un cliente segun su plan
	   //*************************	
	def precio(cliente:Cliente): Double ={
	   cliente.plan.calcularPrecioSegunPlan(this)
	}
}